function [data_random] = abalone_read(file_txt)
    % 读取Abalone数据集文件
    fid = fopen(file_txt, 'rt');
    
    % 初始化存储数组
    data_cells = {};
    line_count = 0;
    
    % 逐行读取数据
    while ~feof(fid)
        line = fgetl(fid);
        if isempty(line)
            continue;  % 跳过空行
        end
        
        % 分割逗号分隔的数据
        parts = strsplit(line, ',');
        
        % 存储数据
        data_cells = [data_cells; parts];
        line_count = line_count + 1;
    end
    fclose(fid);
    
    % 创建数值矩阵
    num_data = zeros(line_count, 9);  % [性别编码, 特征1-7, 环数]
    
    % 性别编码映射
    sex_mapping = containers.Map({'M', 'F', 'I'}, {1, 2, 3});
    
    for i = 1:line_count
        % 转换性别为数值编码
        sex_char = data_cells{i, 1};
        if isKey(sex_mapping, sex_char)
            num_data(i, 1) = sex_mapping(sex_char);
        else
            error('未知的性别标识: %s', sex_char);
        end
        
        % 转换其他特征为数值
        for j = 2:9
            num_data(i, j) = str2double(data_cells{i, j});
        end
    end
    
    % 获取数据集信息
    num_samples = size(num_data, 1);
    
    % 显示数据集统计信息
    fprintf('成功读取Abalone数据集: %s\n', file_txt);
    fprintf('样本数量: %d\n', num_samples);
    fprintf('特征数量: 8 (1个类别特征 + 7个连续特征)\n');
    
    % 显示性别分布
    sex_count = zeros(1, 3);
    sex_labels = {'雄性 (M)', '雌性 (F)', '幼体 (I)'};
    
    for i = 1:3
        sex_count(i) = sum(num_data(:, 1) == i);
        percent = sex_count(i) / num_samples * 100;
        fprintf('  %-10s: %d (%.1f%%)\n', sex_labels{i}, sex_count(i), percent);
    end
    
    % 显示环数分布摘要
    rings = num_data(:, 9);
    fprintf('\n环数分布摘要:\n');
    fprintf('  最小环数: %d\n', min(rings));
    fprintf('  最大环数: %d\n', max(rings));
    fprintf('  平均环数: %.2f\n', mean(rings));
    fprintf('  标准差: %.2f\n', std(rings));
    
    % 显示特征摘要统计
    fprintf('\n特征摘要统计:\n');
    feature_names = {
        '长度 (mm)', 
        '直径 (mm)', 
        '高度 (mm)', 
        '整体重量 (g)', 
        '肉重量 (g)', 
        '内脏重量 (g)', 
        '壳重量 (g)'
    };
    
    fprintf('%-20s %8s %8s %8s %8s\n', '特征', '最小值', '最大值', '平均值', '标准差');
    for i = 1:7
        col = num_data(:, i+1);  % 跳过性别列
        fprintf('%-20s %8.4f %8.4f %8.4f %8.4f\n', ...
                feature_names{i}, min(col), max(col), mean(col), std(col));
    end
    
    % 随机打乱数据
    random_indices = randperm(size(num_data, 1));
    data_random = num_data(random_indices, :);
    
    % 显示打乱后的前几个样本的环数
    fprintf('\n数据已随机打乱，前5个样本的环数:\n');
    disp(data_random(1:5, 9)');
end